import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Objects;
import java.util.Scanner;
import java.util.SplittableRandom;

public class Students {
    /**
     * 构造函数需要传入一个文件名
     * 然后自动生成该文件
     * 并且在其中添加10000个学生的信息
     */

    PrintWriter out = new PrintWriter("students.txt");

    public Students() throws FileNotFoundException {
        //先生成随机分数
        initScore();
        //再用随机分数组成一组随机成绩
        infoStudent();
        //将生成的信息写进文件
        writeFile();
        //关闭文件
        out.close();
    }


    public int initScore() {
        //生成随机分数 0-100
        int score = (int)(Math.random() * 101);
        return score;
    }

    /**
     * 生成随机的学生成绩
     * @return
     */
    public String infoStudent() {
        String result = " ";
        int total = 0;
        int average;
        //生成三科随机成绩
        for (int i = 0; i < 3; i++) {
            result += initScore() + " ";
            total += initScore();
        }
        result += "0 0";
        return result;
    }

    /**
     * 将信息写入文件
     */
    public void writeFile() {
        out.println("姓名 高数 Java 数据结构 平均成绩 总成绩");
        //输入n个学生信息
        for (int i = 0; i < 10000; i++) {
            out.println("张三"+ (i + 1) + infoStudent());
        }
    }

    /**
     * 创建一个新文件写入学生信息 再改名为原来的文件
     * @throws FileNotFoundException
     */
    public void getAverageAndTotal() throws FileNotFoundException {
        Scanner in = new Scanner(new File("students.txt"));//为该文件创建一个扫描器
        PrintWriter out = new PrintWriter("newstudents.txt");
        String firstline = in.nextLine();  //跳过第一行 "姓名 高数 Java 数据结构 平均成绩 总成绩"
        out.println(firstline);
        while (in.hasNextLine()) {  //判断文件是否还有下一行
            String line = in.nextLine();    //当前行为line
            Scanner linescanner = new Scanner(line);    //为当前行创建一个扫描器
            linescanner.useDelimiter(" ");  //设置扫描器的间隔为空格
            String name = linescanner.next();
            int math = Integer.parseInt(linescanner.next());
            int java = Integer.parseInt(linescanner.next());
            int ds = Integer.parseInt(linescanner.next());
            int total = math + java + ds;
            int average = total / 3;
            out.println(name + " " + math + " " + java + " " + ds + " " + average + " " + total);
        }
        in.close();
        out.close();
        File oldfile = new File("newstudents.txt");
        oldfile.renameTo(new File("students.txt"));
    }

    //TODO：找出平均成绩前5的学生 写入 first_5.txt 还差一点点没调完



    /**
     * 把平均成绩存入数组
     * 排序
     * 查找该成绩的位置 写入文件

    public void writeFirstFiveStudents() throws FileNotFoundException {
        //用于储存每个学生的平均成绩
        int[] average = new int[10005];

        //创建文件扫描器
        Scanner scanner = new Scanner(new File("students.txt"));
        String firstline = scanner.nextLine();

        int i = 0;

        //把平均成绩存入数组
        while(scanner.hasNextLine()) {
            String line = scanner.nextLine();
            average[i] = getAverage(line);
            i++;
        }

        scanner.close();

        //排序
        average = selectSort(average);

        //查找并写入文件
        PrintWriter printWriter = new PrintWriter("first_5.txt");
        //把标题写入文件
        printWriter.println(firstline);
        for (int j = 0; j < 5; j++) {
            String[] result = findAverage(average[i]);
            printWriter.println(result);
        }
        printWriter.close();
    }
    */


    /**
     * 查找平均成绩方法
     */
    public String[] findAverage(int average) throws FileNotFoundException {
        String[] result = new String[100];
        //打开文件
        Scanner scanner = new Scanner(new File("students.txt"));    //为当前文件创建扫描器
        while(scanner.hasNextLine()) {
            String line = scanner.nextLine();
            int temp = getAverage(line);
            if (temp == average) {
                for (int i = 0; i < line.length(); i++) {
                    result[i] = String.valueOf(line.charAt(i));
                }
                break;
            }
        }
        return result;
    }

    /**
     * 选择排序
     * @param args
     * @return
     */
    public static int[] selectSort(int[] args){
        for (int i=0;i<args.length-1 ;i++ ){
            int min=i;
            for (int j=i+1;j<args.length ;j++ ){
                if (args[min]>args[j]){
                    min=j;
                }
            }
            if (min!=i){
                int temp=args[i];
                args[i]=args[min];
                args[min]=temp;
            }
        }
        return args;
    }

    /**
     * 该函数用于判断平均成绩大小
     * 大的成绩在前 小的在后
     * 若 小<大 则返回true 需要交换顺序（在其他函数实现）
     */
    boolean judge(int a, int b) {
        if(a < b)   return true;
        return false;
    }

    /**
     * 取出该行的平均成绩
     *
     */
    public int getAverage(String line) {
        String temp = "";
        //设置该行的扫描器
        Scanner linescanner = new Scanner(line);
        //设置扫描器的间隔符
        linescanner.useDelimiter(" ");
        for (int i = 0; i < 5; i++) {
            temp = linescanner.next();
        }
        int averge = Integer.valueOf(temp).intValue();
        return averge;
    }

    /**
     * 查找学生方法：根据传入的name查找，以数组形式返回
     * @param name
     * @return
     * @throws FileNotFoundException
     */
    public static String[] findStudent(String name) throws FileNotFoundException {
        String[] result = new String[100];
        //打开文件
        Scanner scanner = new Scanner(new File("students.txt"));    //为当前文件创建扫描器
        while(scanner.hasNextLine()) {
            String line = scanner.nextLine();
            //为当前行创建扫描器
            Scanner linescanner = new Scanner(line);
            linescanner.useDelimiter(" ");   //设置扫描器的间隔符为空格
            if (linescanner.next().equals(name)) {
                for (int i = 0; i < line.length(); i++) {
                    result[i] = String.valueOf(line.charAt(i));
                }
                break;
            }
        }
        return result;
    }
}
